package scheduler

import "time"

// TaskID 定时任务ID
type TaskID int

// TaskByTime 定时任务排序
type TaskByTime []*Task

type Task struct {
	ID         TaskID    // 定时任务ID
	Schedule   ISchedule // 定时任务调度器
	Next       time.Time // 下次执行时间
	Prev       time.Time // 上次执行时间
	WrapperJob IJob      // 包装任务
	Job        IJob      // 任务
}

// Valid 判断是否为有效任务
func (e Task) Valid() bool {
	return e.ID != 0
}

// Len 数组长度
func (s TaskByTime) Len() int {
	return len(s)
}

// Swap 交换
func (s TaskByTime) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}

// Less 比较
func (s TaskByTime) Less(i, j int) bool {
	if s[i].Next.IsZero() {
		return false
	}
	if s[j].Next.IsZero() {
		return true
	}
	return s[i].Next.Before(s[j].Next)
}
